package xing.example.config.editor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.support.AbstractBeanFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import xing.example.bean.A;
import xing.example.editor.AEditor;

/**
 * 方法 1 通过 AbstractBeanFactory 注册。(建议方法 2，)
 * <p>
 * 注意
 * <p>
 * 1. 不仅需要 BeanFactoryAware 给的确实是 AbstractBeanFactory (不过正常一般来说肯定是，。倒没啥太大关系，。)
 * <p>
 * 2. 为了保证加载顺序的正确性， 在 Editor 被使用前要注册进去，。
 * <p>&nbsp;&nbsp;&nbsp;&nbsp; <b>需要在会用到 Editor 的类上加上 @DependsOn("registerCustomEditors") </b>
 * <p>&nbsp;&nbsp;&nbsp;&nbsp;使用 @Configuration 注解 并不会提前时机，。
 * <p>
 * 不然如果没先被加载，Editor 就没注册，就找不到，就会报错，。
 *
 * @author xing
 * @date 2023/2/15 17:20:39
 */
//@Component
@Deprecated
public class RegisterCustomEditors implements BeanFactoryAware {
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        if (beanFactory instanceof AbstractBeanFactory abstractBeanFactory) {
            registerCustomEditors(abstractBeanFactory);
        }
        // else  nothing ..
    }

    public void registerCustomEditors(AbstractBeanFactory beanFactory) {
        beanFactory.registerCustomEditor(A.class, AEditor.class);
    }
}
